學術支援團隊需要一份 近期表現下滑的在學修讀記錄清單。請將每位學生與其本人於同一課程中較早前的表現進行比較。
確認規則
- 使用兩個時段:
較早與近期。每個時段各有兩項等權重的評核。 - 在比較平均值之前, 每個 時段均須至少有两個非 NULL 分數。
- 計算
decline_points = earlier_avg - recent_avg。 - 下滑達 15 分或以上即表示 須檢視。否則,符合條件的修讀記錄將標示為 無警示。
- 將 資料不足 獨立分類。零分屬於有效分數;NULL 或缺失記錄並不代表零分。
準備你的資料庫
在 pgAdmin 中開啟助教資料夾 lab8_setup.sql 內提供的 DSAI2202/lab8/ 並執行整個檔案。每次建立新連線時,請再次使用右側的連線設定。
此設定亦提供 performance_comparison,這是一個稱為檢視表的已儲存查詢。它將支援後續練習;它並非儲存評核結果的額外資料表。
✍️ 計算前先檢查
檢查 E01、E07、E08、E09 及 E24。判斷哪些在兩個時段均有足夠分數。解釋為何 E24 的零分比 E08 的 NULL 值提供更強的證據。
SET search_path TO lab8;SET search_path TO lab8;
SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;SET search_path TO lab8;
SELECT e.enrolment_id, e.student_id, e.course_code,
r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;檢查設定列數
| 資料表 | 列數 | 每一列代表 |
|---|---|---|
| students | 18 | 一位學生的個人檔案 |
| courses | 4 | 一門課程 |
| enrolments | 24 | 一位學生於一門課程的修讀記錄 |
| assessment_results | 92 | 一筆修讀記錄於某時段的一項評核結果 |
| support_units | 7 | 選修階層練習中的一個支援單位 |
共有 22 筆在學及 2 筆已退修的修讀記錄。最終調查需要 每筆在學修讀記錄各佔一列,而非每項評核一列,或每位學生在所有課程中一列。
五個追蹤案例
| 修讀記錄 | 課程 | 較早時段分數 | 近期時段分數 | 證據是否充足? |
|---|---|---|---|---|
| E01 | SQL101 | 80, 90 | 60, 70 | 是 |
| E07 | SQL101 | 80, NULL | 50, 50 | 否:僅有一個較早時段分數 |
| E08 | SQL101 | 80, 80 | NULL, NULL | 否:近期時段沒有已評分分數 |
| E09 | SQL101 | 沒有列 | 60, 60 | 否:缺少較早時段 |
| E24 | STAT101 | 0, 0 | 0, 0 | 是 |
檢查查詢傳回 18 列評核記錄。E09 只有兩列;其較早時段的評核記錄從缺。E08 有兩列近期記錄,但兩者均沒有已記錄的分數。
檢查兩個符合條件的例子
E01:較早時段平均值 85,近期平均值 65,下滑 20 分 → 須檢視。E24:兩個平均值均為 0,下滑 0 分 → 無警示。其餘三個例子須標示為資料不足。